<?php

 // Carga de Queryx
 require_once("engine/queryx.php");

 // 
 require_once("curso_class.php");
 require_once("profesor_class.php");
 require_once("inscripcion_class.php");

 /**
  * ---------------------------------------------------------------
  * GRUPO CLASE 
  * ---------------------------------------------------------------
  * Funciones necesarias relacionadas con el grupo , esta clase necesita Queryx y esta a su vez
  * necesita de la clase Connect (en la cual deben especificarse los parametros de conexión)
  * están localizadas en engine.
  * 
  * @author Sergio Morlán Páramo
  */
 class Grupo_class extends Queryx {

     private $id, $grupo, $subgrupo, $curso, $profesor, $salon, $costo, $lunesInicio, $lunesFinal, $martesInicio, $martesFinal, $miercolesInicio, $miercolesFinal, $juevesInicio, $juevesFinal, $viernesInicio, $viernesFinal, $sabadoInicio, $sabadoFinal, $domingoFinal, $domingoInicio, $cupo, $periodo, $fechaInicio, $fechaFin;



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      */
     public function __construct($p_id = FALSE) {
         parent::__construct();
         if ($p_id) {
             return $this->xget($p_id);
         } else {
             return FALSE;
         }

     }




     /*
      * ---------------------------------------------------------------
      * SET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a colocar el atributo id
      * @param String $p_id Attr
      */
     public function set_id($p_id) {
         $this->id = $p_id;

     }




     /**
      * Vamos a colocar el atributo grupo
      * @param String $p_grupo Attr
      */
     public function set_grupo($p_grupo) {
         $this->grupo = $p_grupo;

     }




     /**
      * Vamos a colocar el atributo subgrupo
      * @param String $p_subgrupo Attr
      */
     public function set_subgrupo($p_subgrupo) {
         $this->subgrupo = $p_subgrupo;

     }




     /**
      * Vamos a colocar el atributo curso
      * @param String $p_curso Attr
      */
     public function set_curso($p_curso) {
         $this->curso = $p_curso;

     }




     /**
      * Vamos a colocar el atributo profesor
      * @param String $p_profesor Attr
      */
     public function set_profesor($p_profesor) {
         $this->profesor = $p_profesor;

     }




     /**
      * Vamos a colocar el atributo salon
      * @param String $p_salon Attr
      */
     public function set_salon($p_salon) {
         $this->salon = $p_salon;

     }




     /**
      * Vamos a colocar el atributo costo
      * @param String $p_costo Attr
      */
     public function set_costo($p_costo) {
         $this->costo = $p_costo;

     }




     /**
      * Vamos a colocar el atributo lunesInicio
      * @param String $p_lunesInicio Attr
      */
     public function set_lunesInicio($p_lunesInicio) {
         $this->lunesInicio = $p_lunesInicio;

     }




     /**
      * Vamos a colocar el atributo lunesFinal
      * @param String $p_lunesFinal Attr
      */
     public function set_lunesFinal($p_lunesFinal) {
         $this->lunesFinal = $p_lunesFinal;

     }




     /**
      * Vamos a colocar el atributo martesInicio
      * @param String $p_martesInicio Attr
      */
     public function set_martesInicio($p_martesInicio) {
         $this->martesInicio = $p_martesInicio;

     }




     /**
      * Vamos a colocar el atributo martesFinal
      * @param String $p_martesFinal Attr
      */
     public function set_martesFinal($p_martesFinal) {
         $this->martesFinal = $p_martesFinal;

     }




     /**
      * Vamos a colocar el atributo miercolesInicio
      * @param String $p_miercolesInicio Attr
      */
     public function set_miercolesInicio($p_miercolesInicio) {
         $this->miercolesInicio = $p_miercolesInicio;

     }




     /**
      * Vamos a colocar el atributo miercolesFinal
      * @param String $p_miercolesFinal Attr
      */
     public function set_miercolesFinal($p_miercolesFinal) {
         $this->miercolesFinal = $p_miercolesFinal;

     }




     /**
      * Vamos a colocar el atributo juevesInicio
      * @param String $p_juevesInicio Attr
      */
     public function set_juevesInicio($p_juevesInicio) {
         $this->juevesInicio = $p_juevesInicio;

     }




     /**
      * Vamos a colocar el atributo juevesFinal
      * @param String $p_juevesFinal Attr
      */
     public function set_juevesFinal($p_juevesFinal) {
         $this->juevesFinal = $p_juevesFinal;

     }




     /**
      * Vamos a colocar el atributo viernesInicio
      * @param String $p_viernesInicio Attr
      */
     public function set_viernesInicio($p_viernesInicio) {
         $this->viernesInicio = $p_viernesInicio;

     }




     /**
      * Vamos a colocar el atributo viernesFinal
      * @param String $p_viernesFinal Attr
      */
     public function set_viernesFinal($p_viernesFinal) {
         $this->viernesFinal = $p_viernesFinal;

     }




     /**
      * Vamos a colocar el atributo sabadoInicio
      * @param String $p_sabadoInicio Attr
      */
     public function set_sabadoInicio($p_sabadoInicio) {
         $this->sabadoInicio = $p_sabadoInicio;

     }




     /**
      * Vamos a colocar el atributo sabadoFinal
      * @param String $p_sabadoFinal Attr
      */
     public function set_sabadoFinal($p_sabadoFinal) {
         $this->sabadoFinal = $p_sabadoFinal;

     }




     /**
      * Vamos a colocar el atributo domingoFinal
      * @param String $p_domingoFinal Attr
      */
     public function set_domingoFinal($p_domingoFinal) {
         $this->domingoFinal = $p_domingoFinal;

     }




     /**
      * Vamos a colocar el atributo domingoInicio
      * @param String $p_domingoInicio Attr
      */
     public function set_domingoInicio($p_domingoInicio) {
         $this->domingoInicio = $p_domingoInicio;

     }




     /**
      * Vamos a colocar el atributo cupo
      * @param String $p_cupo Attr
      */
     public function set_cupo($p_cupo) {
         $this->cupo = $p_cupo;

     }




     /**
      * Vamos a colocar el atributo periodo
      * @param String $p_periodo Attr
      */
     public function set_periodo($p_periodo) {
         $this->periodo = $p_periodo;

     }




     /**
      * Vamos a colocar el atributo fechaInicio
      * @param String $p_fechaInicio Attr
      */
     public function set_fechaInicio($p_fechaInicio) {
         $this->fechaInicio = $p_fechaInicio;

     }




     /**
      * Vamos a colocar el atributo fechaFin
      * @param String $p_fechaFin Attr
      */
     public function set_fechaFin($p_fechaFin) {
         $this->fechaFin = $p_fechaFin;

     }




     /*
      * ---------------------------------------------------------------
      * GET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el atributoid
      * @return String $this->id
      */
     public function get_id() {
         return $this->id;

     }




     /**
      * Vamos a obtener el atributogrupo
      * @return String $this->grupo
      */
     public function get_grupo() {
         return $this->grupo;

     }




     /**
      * Vamos a obtener el atributosubgrupo
      * @return String $this->subgrupo
      */
     public function get_subgrupo() {
         return $this->subgrupo;

     }




     /**
      * Vamos a obtener el atributocurso
      * @return String $this->curso
      */
     public function get_curso() {
         if ($this->curso == NULL)
             return $this->curso;
         $curso = new Curso_class($this->curso);
         return $curso;

     }




     /**
      * Vamos a obtener el atributoprofesor
      * @return String $this->profesor
      */
     public function get_profesor() {
         return $this->profesor;

     }




     /**
      * Vamos a obtener el atributosalon
      * @return String $this->salon
      */
     public function get_salon() {
         return $this->salon;

     }




     /**
      * Vamos a obtener el atributocosto
      * @return String $this->costo
      */
     public function get_costo() {
         return $this->costo;

     }




     /**
      * Vamos a obtener el atributolunesInicio
      * @return String $this->lunesInicio
      */
     public function get_lunesInicio() {
         return $this->lunesInicio;

     }




     /**
      * Vamos a obtener el atributolunesFinal
      * @return String $this->lunesFinal
      */
     public function get_lunesFinal() {
         return $this->lunesFinal;

     }




     /**
      * Vamos a obtener el atributomartesInicio
      * @return String $this->martesInicio
      */
     public function get_martesInicio() {
         return $this->martesInicio;

     }




     /**
      * Vamos a obtener el atributomartesFinal
      * @return String $this->martesFinal
      */
     public function get_martesFinal() {
         return $this->martesFinal;

     }




     /**
      * Vamos a obtener el atributomiercolesInicio
      * @return String $this->miercolesInicio
      */
     public function get_miercolesInicio() {
         return $this->miercolesInicio;

     }




     /**
      * Vamos a obtener el atributomiercolesFinal
      * @return String $this->miercolesFinal
      */
     public function get_miercolesFinal() {
         return $this->miercolesFinal;

     }




     /**
      * Vamos a obtener el atributojuevesInicio
      * @return String $this->juevesInicio
      */
     public function get_juevesInicio() {
         return $this->juevesInicio;

     }




     /**
      * Vamos a obtener el atributojuevesFinal
      * @return String $this->juevesFinal
      */
     public function get_juevesFinal() {
         return $this->juevesFinal;

     }




     /**
      * Vamos a obtener el atributoviernesInicio
      * @return String $this->viernesInicio
      */
     public function get_viernesInicio() {
         return $this->viernesInicio;

     }




     /**
      * Vamos a obtener el atributoviernesFinal
      * @return String $this->viernesFinal
      */
     public function get_viernesFinal() {
         return $this->viernesFinal;

     }




     /**
      * Vamos a obtener el atributosabadoInicio
      * @return String $this->sabadoInicio
      */
     public function get_sabadoInicio() {
         return $this->sabadoInicio;

     }




     /**
      * Vamos a obtener el atributosabadoFinal
      * @return String $this->sabadoFinal
      */
     public function get_sabadoFinal() {
         return $this->sabadoFinal;

     }




     /**
      * Vamos a obtener el atributodomingoFinal
      * @return String $this->domingoFinal
      */
     public function get_domingoFinal() {
         return $this->domingoFinal;

     }




     /**
      * Vamos a obtener el atributodomingoInicio
      * @return String $this->domingoInicio
      */
     public function get_domingoInicio() {
         return $this->domingoInicio;

     }




     /**
      * Vamos a obtener el atributocupo
      * @return String $this->cupo
      */
     public function get_cupo() {
         return $this->cupo;

     }




     /**
      * Vamos a obtener el atributoperiodo
      * @return String $this->periodo
      */
     public function get_periodo() {
         return $this->periodo;

     }




     /**
      * Vamos a obtener el atributofechaInicio
      * @return String $this->fechaInicio
      */
     public function get_fechaInicio() {
         return $this->fechaInicio;

     }




     /**
      * Vamos a obtener el atributofechaFin
      * @return String $this->fechaFin
      */
     public function get_fechaFin() {
         return $this->fechaFin;

     }




     /*
      * ---------------------------------------------------------------
      * BASIC METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Inserta en GRUPO
      * Previamente colocados sus atributos con métodos Set
      *
      */
     public function xnew() {
         $query = "INSERT INTO `GRUPO` (`id`, `grupo`, `subgrupo`, `curso`, `profesor`, `salon`, `costo`, `lunesInicio`, `lunesFinal`, `martesInicio`, `martesFinal`, `miercolesInicio`, `miercolesFinal`, `juevesInicio`, `juevesFinal`, `viernesInicio`, `viernesFinal`, `sabadoInicio`, `sabadoFinal`, `domingoFinal`, `domingoInicio`, `cupo`, `periodo`, `fechaInicio`, `fechaFin`) VALUES ('" . $this->id . "', '" . $this->grupo . "', '" . $this->subgrupo . "', '" . $this->curso . "', '" . $this->profesor . "', '" . $this->salon . "', '" . $this->costo . "', '" . $this->lunesInicio . "', '" . $this->lunesFinal . "', '" . $this->martesInicio . "', '" . $this->martesFinal . "', '" . $this->miercolesInicio . "', '" . $this->miercolesFinal . "', '" . $this->juevesInicio . "', '" . $this->juevesFinal . "', '" . $this->viernesInicio . "', '" . $this->viernesFinal . "', '" . $this->sabadoInicio . "', '" . $this->sabadoFinal . "', '" . $this->domingoFinal . "', '" . $this->domingoInicio . "', '" . $this->cupo . "', '" . $this->periodo . "', '" . $this->fechaInicio . "', '" . $this->fechaFin . "'); ";
         return $this->run_queryx($query);

     }




     /**
      * Actualiza todos los campos de GRUPO
      * Previamente colocados sus atributos actualizados con métodos Set 
      *
      * @param int $p_idId de GRUPO
      */
     public function xchange($p_id) {
         $query = "UPDATE `GRUPO` SET `grupo` = '" . $this->grupo . "', `subgrupo` = '" . $this->subgrupo . "', `curso` = '" . $this->curso . "', `profesor` = '" . $this->profesor . "', `salon` = '" . $this->salon . "', `costo` = '" . $this->costo . "', `lunesInicio` = '" . $this->lunesInicio . "', `lunesFinal` = '" . $this->lunesFinal . "', `martesInicio` = '" . $this->martesInicio . "', `martesFinal` = '" . $this->martesFinal . "', `miercolesInicio` = '" . $this->miercolesInicio . "', `miercolesFinal` = '" . $this->miercolesFinal . "', `juevesInicio` = '" . $this->juevesInicio . "', `juevesFinal` = '" . $this->juevesFinal . "', `viernesInicio` = '" . $this->viernesInicio . "', `viernesFinal` = '" . $this->viernesFinal . "', `sabadoInicio` = '" . $this->sabadoInicio . "', `sabadoFinal` = '" . $this->sabadoFinal . "', `domingoFinal` = '" . $this->domingoFinal . "', `domingoInicio` = '" . $this->domingoInicio . "', `cupo` = '" . $this->cupo . "', `periodo` = '" . $this->periodo . "', `fechaInicio` = '" . $this->fechaInicio . "', `fechaFin` = '" . $this->fechaFin . "' WHERE id = '" . $p_id . "';";
         return $this->run_queryx($query);

     }




     /**
      * Elimina definitivamente de la base de datos GRUPO
      *
      * @param int $p_idId de GRUPO
      */
     public function xdel($p_id) {
         $query = "DELETE FROM `GRUPO` WHERE `id` = '" . $p_id . "';";
         return $this->run_queryx($query);

     }




     /*
      * ---------------------------------------------------------------
      * SEARCH METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Busca y Devuleve un único registro en GRUPO
      * @access private
      * @param int $p_idId de GRUPO
      * @param int $p_field campo UNIQUE o PRIMARY KEY de GRUPO
      */
     private function xget($p_id, $p_field=FALSE) {
         $index = "id";
         if ($p_field)
             $index = $p_field;
         $query = "SELECT * FROM `GRUPO` WHERE `$index` = '" . $p_id . "' LIMIT 1;";
         $result = $this->run_queryx($query);
         if ($this->get_total_rows() > 0) {
             $this->xassign($result);
             return TRUE;
         }
         return FALSE;

     }




     /**
      * Busca y Devuleve todos registro en GRUPO
      * @param Array $p_campos Arreglo de los Campos a Seleccionar
      * @param String $p_filtro Cadena con los filtros para la búsqueda
      * @return Mixed
      */
     public function xgets($p_campos=FALSE, $p_filtro=FALSE, $p_order=FALSE) {
         $grupo = NULL;
         $campos = "*";
         $filtro = "";
         $order = "";
         if ($p_campos) {
             $campos = "`id`,";
             if (is_array($p_campos)) {
                 for ($i = 0; $i < count($p_campos); $i++) {
                     $campos .= "`" . $p_campos[$i] . "`";
                     if ($i < count($p_campos) - 1) {
                         $campos .=", ";
                     }
                 }
             } else {
                 $campos .= "`" . $p_campos . "` ";
             }
         }
         if ($p_filtro)
             $filtro = "WHERE " . $p_filtro;
         if ($p_order)
             $order = "ORDER BY `" . $p_order . "`";
         $query = "SELECT $campos FROM `GRUPO` $filtro $order;";
         $result = $this->run_queryx($query);
         if ($this->get_total_rows() > 0) {
             while ($row = mysql_fetch_array($result)) {
                 $grupo[] = new Grupo_class($row[0]);
             }
             return $grupo;
         }
         return FALSE;

     }




     /*
      * ---------------------------------------------------------------
      * JOIN METHODS
      * ---------------------------------------------------------------
      */



     public function inscrito_curso($id_alumno, $id_curso=FALSE) {
         if (!$id_curso)
             $id_curso = $this->get_id();

         $inscripcion = new Inscripcion_class();
         return ($inscripcion->xget(FALSE, FALSE, $id_alumno, $id_curso)) ? TRUE : FALSE;

     }




     public function get_join($id_alumno) {
         $inscripcion = new Inscripcion_class();
         $inscripciones = $inscripcion->xgets(FALSE, "`alumno`='" . $id_alumno . "'", "fechaInscripcion");
         if (!$inscripciones)
             return FALSE;
         foreach ($inscripciones as $key => $value) {
             $grupo[] = new Grupo_class($inscripciones[$key]->get_grupo());
         }
         return $grupo;

     }




     /*
      * ---------------------------------------------------------------
      * LEAVE METHODS
      * ---------------------------------------------------------------
      */

     /*
      * ---------------------------------------------------------------
      * ASSIGN METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Asignación Coloca todos los atributos del objeto encontrado mediante xget()
      * Sólo soporta un resultado
      * @access private
      * @param resource $p_queryx (query) SELECT sólo registro devuelto
      *
      */
     private function xassign($p_queryx) {
         $this->id = mysql_result($p_queryx, 0, 0);
         $this->grupo = mysql_result($p_queryx, 0, 1);
         $this->subgrupo = mysql_result($p_queryx, 0, 2);
         $this->curso = mysql_result($p_queryx, 0, 3);
         $this->profesor = mysql_result($p_queryx, 0, 4);
         $this->salon = mysql_result($p_queryx, 0, 5);
         $this->costo = mysql_result($p_queryx, 0, 6);
         $this->lunesInicio = mysql_result($p_queryx, 0, 7);
         $this->lunesFinal = mysql_result($p_queryx, 0, 8);
         $this->martesInicio = mysql_result($p_queryx, 0, 9);
         $this->martesFinal = mysql_result($p_queryx, 0, 10);
         $this->miercolesInicio = mysql_result($p_queryx, 0, 11);
         $this->miercolesFinal = mysql_result($p_queryx, 0, 12);
         $this->juevesInicio = mysql_result($p_queryx, 0, 13);
         $this->juevesFinal = mysql_result($p_queryx, 0, 14);
         $this->viernesInicio = mysql_result($p_queryx, 0, 15);
         $this->viernesFinal = mysql_result($p_queryx, 0, 16);
         $this->sabadoInicio = mysql_result($p_queryx, 0, 17);
         $this->sabadoFinal = mysql_result($p_queryx, 0, 18);
         $this->domingoFinal = mysql_result($p_queryx, 0, 19);
         $this->domingoInicio = mysql_result($p_queryx, 0, 20);
         $this->cupo = mysql_result($p_queryx, 0, 21);
         $this->periodo = mysql_result($p_queryx, 0, 22);
         $this->fechaInicio = mysql_result($p_queryx, 0, 23);
         $this->fechaFin = mysql_result($p_queryx, 0, 24);

     }




     /*
      * ---------------------------------------------------------------
      * OTHER METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el ultimo mayor registro en matricula de grupo
      * @return int  
      */
     public function get_ultimomayor() {
         $query = "SELECT MAX(`id`) AS id FROM `GRUPO`";
         $row = mysql_fetch_assoc($this->run_queryx($query));
         return $row["id"];

     }




     /**
      * Retorna el siguiente registro sugerido para matricula en grupo
      * por default incrementará en 1 no es recomendable cambiar este parámetro
      * a menos que sea muy necesario
      * @param int $incremento Cuanto deseas incrementar al último registro obtenido
      * @return int El id (id) sugerido 
      */
     public function get_siguienteID($incremento = 1) {
         return $this->get_ultimomayor() + 1;

     }




 }

 